package text;

import java.util.function.UnaryOperator;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.stage.Stage;

// 多行文本输入框(方法比TextField多)
public class TextAreaDemo extends Application {
	private StackPane root = new StackPane();
	private TextArea ta;
	
	public static void main(String[] args) {
		launch(args);
	}
	
	@Override
	public void start(Stage stage) {
		
		root.setPadding(new Insets(30));
		
		ta = new TextArea("abcde"); 
		ta.setPrefSize(200, 200);
		ta.setFont(Font.font(20));
		ta.appendText("12345");	 	// 追加文本
		ta.setWrapText(true);		// 设置自动换行
//		ta.deleteText(0, 3);		 	删除第0,1,2个字符
//		ta.replaceText(0, 2, "ABC");	代替指定位置的文本
//		ta.selectRange(0, 3);			选择文本
//		ta.clear();					清空文本	
		root.getChildren().add(ta);
		
		Scene scene = new Scene(root, 400, 300);
		stage.setScene(scene);
		stage.show();
		
		// 限制用户输入格式(新输入的值传到t,经过过滤后才返回给textArea);还可以用文本属性监听实现限制长度
		ta.setTextFormatter(new TextFormatter<String>( new UnaryOperator<Change>() {

			@Override
			public Change apply(Change t) {
						
				if(t.getText().matches("[a-z]*")) {
					return t;
				} else {
					return null;
				}
			}
		}));
		
//		// 限制用户输入格式（用e指代内部类对象）
//		ta.setTextFormatter(new TextFormatter<String>( e -> {
//						
//				if(e.getText().matches("[a-z]*")) {
//					return e;
//				} else {
//					return null;
//				}
//		} ));
	}
}
